import Vue from 'vue'
import app from './App.vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
import router from './router.js'
import Vuex from 'vuex'
Vue.use(Vuex)

import VueResource from 'vue-resource'
Vue.use(VueResource)

import VuePreview from 'vue-preview'; //缩略图组件注册
Vue.use(VuePreview);

import './lib/mui/dist/css/mui.min.css'
import './lib/mui/dist/css/icons-extra.css'

import MintUI from 'mint-ui'
import 'mint-ui/lib/style.css'
Vue.use(MintUI)
    // import { Header, Tabbar, TabItem, Swipe, SwipeItem, Button } from 'mint-ui';
    // Vue.component(Header.name, Header);
    // Vue.component(Tabbar.name, Tabbar);
    // Vue.component(TabItem.name, TabItem);
    // Vue.component(Swipe.name, Swipe);
    // Vue.component(SwipeItem.name, SwipeItem);
    // Vue.component(Button.name, Button);

//自定义全局过滤器，时间过滤器
import moment from 'moment'
Vue.filter('dataFormate', function(dataStr, pattern = 'YYYY-MM-DD HH:mm:ss') { //pattern作为过滤器中的形参，可以给定默认值（即后面的等于号），也可以在用时自己给定格式
    moment(dataStr).format(pattern)
})

var car = JSON.parse(localStorage.getItem('car') || '[]')
    // var car = []
var store = new Vuex.Store({
    state: {
        // 组件中想要访问store的数据，需要通过 this.$store.state.数据名 访问，但不推荐其他组件直接访问
        car: car // {id:  ,count:  ,price:  ,selected: true}
    },
    mutations: {
        // 如果要操作store中的state值，只能通过调用mutations提供的方法，才能操作对应数据，不推荐直接操作对应的数据，如：
        // increase(state) { // 第一个参数必须是state，第二个才是传来的参数，且最多只能传一个参数过来
        //     state.count++
        // },
        // 如果组件想要调用mutations的方法，只能通过this.$store.commit('方法名'),如 this.$store.commit('increase')
        // 这种调用方式和格式，与this.$emit('父组件中的方法名')相似
        addcar(state, goods) {
            var z = false
            state.car.some((item) => {
                if (item.id == goods.id) {
                    if (goods.reset && goods.flag == undefined) {
                        item.count = parseInt(goods.count)
                        z = !z
                        return true
                    } else {
                        item.count += parseInt(goods.count)
                        z = !z
                        return true
                    }
                }
            })
            if (!z) {
                state.car.push(goods)
            }
            localStorage.setItem('car', JSON.stringify(state.car))
        },
        switch (state, data) {
            state.car.some(item => {
                if (item.id == data.id) {
                    item.selected = data.selected
                    return true
                }
            })
        }
    },
    getters: {
        // 注意这个 getters 只负责对外提供数据，而不能修改数据
        // 调用同样用 this.$store.getters.函数名 
        // 与computed比较像，只要数据已发生变化，便会立即触发 getters 重新调用
        getnum(state) {
            var a = 0;
            state.car.forEach(element => {
                if (element.selected) a += element.count

            });
            return a
        },
        getcar(state) {
            return state.car
        },
        getprice(state) {
            var price = 0
            state.car.forEach(item => {
                if (item.selected) {
                    price += item.price * item.count
                }
            })
            return price
        }
    }
})

var vm = new Vue({
    el: '#app',
    render: c => c(app),
    router,
    store
})